package util

import (
	"fmt"
	"github.com/xuri/excelize/v2"
	"log"
	"path/filepath"
	"strconv"
	"time"
)

// 对下面的写一个测试函数
func ExportExcel(headers []string, data [][]interface{}, savePath string) {
	// 创建新 Excel 文件
	f := excelize.NewFile()
	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println(err)
		}
	}()

	// 创建工作表（默认已创建 Sheet1）
	index, _ := f.NewSheet("Sheet1")

	// 设置表头样式
	headerStyle, _ := f.NewStyle(&excelize.Style{
		Font: &excelize.Font{Bold: true, Color: "#FFFFFF"},
		Fill: excelize.Fill{
			Type: "pattern", Pattern: 1, Color: []string{"#4F81BD"},
		},
	})

	// 写入表头（从 Sheet1 的 A1 开始）
	for col, h := range headers {
		cell, _ := excelize.CoordinatesToCellName(col+1, 1)
		err := f.SetCellValue("Sheet1", cell, h)
		if err != nil {
			log.Printf("填充单元格标题错误：%v", err)
			return
		}
		err = f.SetCellStyle("Sheet1", cell, cell, headerStyle)
		if err != nil {
			log.Printf("填充单元格样式错误：%v", err)
			return
		}
	}

	// 写入数据行（从第 2 行开始）
	for rowIdx, row := range data {
		for colIdx, cellValue := range row {
			cell, _ := excelize.CoordinatesToCellName(colIdx+1, rowIdx+2)
			err := f.SetCellValue("Sheet1", cell, cellValue)
			if err != nil {
				log.Printf("填充单元格错误：%v", err)
				return
			}
		}
	}

	// 设置列宽
	err := f.SetColWidth("Sheet1", "A", "C", 20)
	if err != nil {
		log.Printf("设置列宽错误：%v", err)
		return
	}

	// 设置活动工作表
	f.SetActiveSheet(index)
	// 获取当前时间
	now := time.Now()

	// 获取时间戳（秒）
	timestamp := now.Unix()
	// 将 int64 转换为字符串
	str := strconv.FormatInt(timestamp, 10)
	str = str + ".xlsx"
	fileSave := filepath.Join(savePath, str)
	// 保存文件
	if err := f.SaveAs(fileSave); err != nil {
		log.Printf("保存失败:%v\n", err)
	} else {
		log.Printf("文件已生成:%s\n", fileSave)
	}
}
